package com.znsd.zl.order.entity;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;

/**
 * @ClassName TOrder
 * @Description 描述
 * @author wk
 * @email jaypdd@163.com
 * @date 2020-08-16 21:16:34
 * @Version v1.0
 */
@Data
@TableName("t_order")
public class OrderEntity implements Serializable, Delayed {

	private static final long serialVersionUID = 1L;

	/**
	 * id标识，主键，唯一
	 */
	@TableId
	private Integer id;

	/**
	 * 订单编号，唯一，非空
	 */
	private Long orderNo;

	/**
	 * 实际付款金额
	 */
	private BigDecimal payment;

	/**
	 * 支付方式，1（支付宝）2（微信）3（平台账户余额）
	 */
	private Integer paymentType;

	/**
	 * 订单状态，1(已完成)  2（未支付）3（已取消）
	 */
	private Integer orderStatus;

	/**
	 * 租房信息ID，外键
	 */
	private Integer rentId;

	/**
	 * 房源负责员工ID，外键
	 */
	private Integer empNo;

	/**
	 * 用户id，外键
	 */
	private Integer userId;

	/**
	 * 订单创建时间
	 */
	private String createTime;

	/**
	 * 过期时间
	 */
	private Long expirationTime;
	/**
	 * 逻辑删除，1（未删除）2（已删除）
	 */
	private Integer isDelete;

	/**
	 *  判断延迟队列数据是否过期
	 * @param unit
	 * @return  0或者小于0过期
	 */
	@Override
	public long getDelay(TimeUnit unit) {
		return this.expirationTime - System.currentTimeMillis();
	}

	/**
	 * 计算对象在队列里面的优先级，从小到大
	 * @param o
	 * @return
	 */
	@Override
	public int compareTo(Delayed o) {
		if (this == o) {
			return 0;
		}
		if (o instanceof OrderEntity) {
			OrderEntity orderEntity = (OrderEntity)o;
			long otherTime = this.expirationTime - orderEntity.getExpirationTime();
			return (int) otherTime;
		}
		return 0;
	}
}
